package okkong;

import com.baomidou.mybatisplus.enums.FieldFill;
import com.kerns.generator.config.*;
import com.kerns.generator.AutoGenerator;
import com.kerns.generator.config.po.TableFill;
import com.kerns.generator.config.rules.DbType;
import com.kerns.generator.config.rules.NamingStrategy;
import com.kerns.generator.engine.VelocityTemplateEngine;

import java.util.ArrayList;
import java.util.List;

/**
 * 分模块自动代码模版
 *
 * @author kerns
 * @version 1.0
 * @since 2018/6/8
 */
public class MultimodeBuilder {

    public static void builder() {
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
//        gc.setProjectPath("/work/kongtian/okni-generator/geratetest");
        //项目路径
        gc.setProjectPath("/Volumes/kerns/work/kongtian/okni-generator/geratetest");
        //modula路径
        gc.setBizModule("biz");
        gc.setWebModule("web");
        gc.setDaoModule("mybaits");
        gc.setCommonModule("common");
        //设置文件是否覆盖
        gc.setFileOverride(false);
        gc.setActiveRecord(true);
        gc.setOpen(false);
        // XML 二级缓存
        gc.setEnableCache(false);
        //BaseResultMap 返回
        gc.setBaseResultMap(true);// XML ResultMap
        //Base_Column_List 显示
        gc.setBaseColumnList(true);
        gc.setAuthor("kerns");
        mpg.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/farm?useSSL=true&serverTimezone=UTC&characterEncoding=utf8");
        mpg.setDataSource(dsc);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // 表名生成策略
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //是否反射表字段属性
        strategy.entityTableFieldAnnotationEnable(true);
        //逻辑删除字段
        strategy.setLogicDeleteFieldName("isDelete");
        // 字段名生成策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setSkipView(true);
        List<TableFill> list = new ArrayList<TableFill>();
        list.add(new TableFill("add_time", FieldFill.DEFAULT));
        strategy.setTableFillList(list);
        mpg.setStrategy(strategy);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("wallet");
        pc.setParent("com.okni.okpool");
        pc.setEntity("entity");
        pc.setMapper("repository");
        pc.setXml("mapper");
        mpg.setPackageInfo(pc);
        // 自定义模板配置
        TemplateConfig tc = new TemplateConfig();
        tc.setController("/template/data/DataController.java");
        tc.setEntity("/template/data/DataEntity.java");
        tc.setMapper("/template/data/DataDAO.java");
        tc.setDto("/template/data/DataDTO.java");
        tc.setService("/template/data/DataService.java");
        tc.setServiceImpl("/template/data/DataServiceImpl.java");
        tc.setXml(null);
        tc.setReq(null);
        mpg.setTemplate(tc);
        mpg.setTemplateEngine(new VelocityTemplateEngine());
        mpg.execute();
    }

    public static void main(String[] args) {
        try {
            builder();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
